package com.mark.controller;


import com.alibaba.fastjson.JSON;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.mark.entity.MyTableData;
import com.mark.entity.school.MyClaStuTable;
import com.mark.entity.school.UPatriarch;
import com.mark.entity.school.UStudent;
import com.mark.service.UStudentService;
import com.mark.utils.FileUtil;
import com.alibaba.fastjson.JSON;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ClassUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.*;

/**
 * (UStudent)表控制层
 *
 * @author Deng PengFei
 * @since 2021-10-27 11:17:38
 */
@CrossOrigin
@RestController
@RequestMapping("student")
public class UStudentController {
    @Autowired
    private UStudentService uStudentService;


    /**
     * 新增一个学生对象
     *
     * @param uStudent   学生对象实例
     * @param uPatriarch 学生家长实例对象
     * @param relation   亲属关系
     * @return 1001 成功 、 1002 学生已经存在，1003 失败
     */
    @PostMapping("addStudent")
    public Integer addStudent(UStudent uStudent, UPatriarch uPatriarch, String relation) {
        return this.uStudentService.addStudent(uStudent, uPatriarch, relation);
    }

    /**
     * 查询指定行数据 也可以通过姓名的学号查询
     *
     * @param queryInfo 学号或者姓名
     * @param pageNum   第几页
     * @param pageSize  每一页显示的数据
     * @return 对象列表
     */
    @PostMapping("getClaStuPatListByClaId")
    public MyTableData getClaStuPatListByClaId(Integer claId, String queryInfo, Integer pageNum, Integer pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        List<MyClaStuTable> myClaStuTables = this.uStudentService.getClaStuPatListByClaId(claId, queryInfo);
        PageInfo<MyClaStuTable> myClaStuTablePageInfo = new PageInfo<>(myClaStuTables);
        return new MyTableData(myClaStuTablePageInfo.getTotal(), myClaStuTables, "", 200);
    }


    /**
     * 根据学号来重置学生密码
     *
     * @param stuId 学  号
     * @return 存在结果
     */
    @GetMapping("restStuPass")
    public String restStuPassBuSno(Integer stuId) {
        return this.uStudentService.restStuPassBuSno(stuId);
    }


    /**
     * 批量删除学生；
     *
     * @return true 成功   false 失败
     */
    @PostMapping("delStuList")
    public Boolean delStuList(@RequestBody List<MyClaStuTable> members) {
        return this.uStudentService.delStuList(members);
    }

    /**
     * 根据班级Id批量导入学生信息文件文件
     *
     * @return true 成功  false 失败
     */
    @PostMapping("importStuExcel")
    public Boolean importStuExcel(MultipartFile file, Integer claId) {
        String fileName = file.getOriginalFilename(); // 获取文件名
        String savePath = ClassUtils.getDefaultClassLoader().getResource("").getPath(); // 获取保存路径
        try {
            File saveFile = new File(savePath + "/static/importFile/" + fileName);
            if (saveFile.exists()) {
                saveFile.delete();
            }
            file.transferTo(saveFile); //保存文件
            ArrayList<ArrayList<String>> excelList = FileUtil.readExcel(saveFile);
            this.uStudentService.importStuList(excelList, claId);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 下载模板
     *
     * @param fileName 文件名
     * @param res      响应
     */
    @GetMapping("downloadTemp")
    public void downloadTem(String fileName, HttpServletResponse res) {
        String realPath = "/static/template/" + fileName;
        try {
            FileUtil.downLoadFile(res, fileName, realPath);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    /**
     * 生转移班级
     *
     * @param data 数据
     * @return true 成功 ，false 失败
     */
    @PostMapping("shiftStuListToNewCla")
    public Boolean shiftStuList(@RequestBody Map<String, Object> data) {
        List<MyClaStuTable> stuList = JSON.parseArray(JSON.toJSONString(data.get("members")), MyClaStuTable.class);
        int claId = Integer.parseInt(String.valueOf(data.get("claId")));
        return this.uStudentService.shiftStuList(stuList, claId);
    }





}